GitHub Actions の変数を管理する仕組みには「環境変数」と「構成変数」の2つがある
こんにちは、製造ビジネステクノロジー部の若槻です。
GitHub Actions には、変数を管理する仕組みとして環境変数 (Environment Variables) と構成変数 (Configuration Variables) があります。
それぞれ次のようなスコープの変数が利用可能です。
- 環境変数 (Environment Variables)
- ワークフロー (Workflow)
- ジョブ (Job)
- ステップ (Step)
- 構成変数 (Configuration Variables)
- 組織 (Organization)
- リポジトリ (Repository)
- 環境 (Environment)
これら 2 つの機能は名前や概念が似ており紛らわしかったので今回整理してみました。
環境変数
環境変数 (Environment Variables) は単一のワークフロー内で利用する変数の管理に使用する機能で、env
キーを使用して定義およびアクセスが可能です。
環境変数には次の 3 つのスコープがあります。異なるスコープに同じ名前の変数がある場合は狭いスコープの変数が優先されます。
- ワークフロー (Workflow)
- ワークフロー内の特定のジョブ (Job)
- ジョブ内の特定のステップ (Step)
下記はワークフロー、ジョブ、ステップのそれぞれで環境変数を定義してアクセスする例です。コメントに記載されている変数の値が出力されます。
on: workflow_dispatch
env:
MY_ENV_1: 'Workflow Environment Variable 1'
MY_ENV_2: 'Workflow Environment Variable 2'
jobs:
job1:
runs-on: ubuntu-latest
steps:
# Workflow Environment Variable 1
- run: echo ${{ env.MY_ENV_1 }}
# Step Environment Variable 1
- run: echo ${{ env.MY_ENV_1 }}
env:
MY_ENV_1: 'Step Environment Variable 1'
job2:
runs-on: ubuntu-latest
env:
MY_ENV_1: 'Job Environment Variable 1'
steps:
# Job Environment Variable 1
- run: echo ${{ env.MY_ENV_1 }}
# Workflow Environment Variable 2
- run: echo ${{ env.MY_ENV_2 }}
# Step Environment Variable 1
- run: echo ${{ env.MY_ENV_1 }}
env:
MY_ENV_1: 'Step Environment Variable 1'
参考
構成変数
構成変数 (Configuration Variables) は複数のワークフロー内で利用する変数の管理に使用する機能で、設定はそれぞれのスコープの管理画面から行い、ワークフロー内で vars
キーを使用してアクセスが可能です。
構成変数が利用可能となったのは昨年 1 月とかなり最近で、現時点でもまだパブリックプレビューである比較的新しい機能となります。
構成変数には次の 3 つのスコープがあります。異なるスコープに同じ名前の変数がある場合は狭いスコープの変数が優先されます。
- 組織 (Organization)
- リポジトリ (Repository)
- 環境 (Environment)
検証のために下記のように環境とリポジトリの構成変数を設定します。
- Environments
DEVELOPMENT
MY_VAR_1
:Development Environment Variable 1
MY_VAR_2
:Development Environment Variable 2
- Repository Variables
MY_VAR_1
:Repository Variable 1
MY_VAR_3
:Repository Variable 2
下記は構成変数にワークフローからアクセスする例です。コメントに記載されている変数の値が出力されます。
on: workflow_dispatch
jobs:
job1:
environment: DEVELOPMENT
runs-on: ubuntu-latest
steps:
# Development Environment Variable 1
- run: echo ${{ vars.MY_VAR_1 }}
# Development Environment Variable 2
- run: echo ${{ vars.MY_VAR_2 }}
# Repository Variable 2
- run: echo ${{ vars.MY_VAR_3 }}
job2:
runs-on: ubuntu-latest
steps:
# Repository Variable 1
- run: echo ${{ vars.MY_VAR_1 }}
# null
- run: echo ${{ vars.MY_VAR_2 }}
# Repository Variable 2
- run: echo ${{ vars.MY_VAR_3 }}
下記は VS Code で GitHub Actions extension に表示している各種構成変数が、ワークフローからのアクセスに対して対応するスコープの値が取得されている様子です。
参考
構成変数と環境変数の関係
変数名が同じであっても、構成変数と環境変数の一方がもう一方を上書きすることはありません。
構成変数から環境変数に値を受け渡しする場合は、次のように GITHUB_ENV
を使用して行います。
on: workflow_dispatch
env:
MY_ENV_1: 'Workflow Environment Variable 1'
jobs:
job1:
runs-on: ubuntu-latest
steps:
# Workflow Environment Variable 1
- run: echo ${{ env.MY_ENV_1 }}
# 構成変数 MY_VAR_1 の値を、環境変数 MY_VAR_1 に設定
- run: echo "${{vars.MY_VAR_1}}=$MY_VAR_1" >> $GITHUB_ENV
# Repository Variable 1
- run: echo ${{ env.MY_ENV_1 }}
おわりに
GitHub Actions の変数を管理する仕組みである「環境変数」と「構成変数」のご紹介でした。
「Environment Variables」と「(Configuration Variables)の Environment の Variables」という名称も用途も似通った概念があり、「env
と vars
でどっちがどったいにアクセスできるんだっけ?」と迷うことがしばしばだったので、今回整理してみました。
以上